<?php
// 1908080121李定邦、1902030115李龙烽
namespace app\ldblf_forum\controller;

// use think\facade\View;
use app\BaseController;
use app\ldblf_forum\validate\LogUser;
use think\exception\ValidateException;

// use think\facade\Db;
// use think\facade\Request;
// use think\facade\Session;
// use app\contriller;
// use think\facade\Cookie;
// use think\facade\Filesystem;

class User extends BaseController
{
    // 注册控制器中间件
    protected $middleware = [
        'tc'    =>      ['only' =>  ['doregister','dologin']],
    ];
    /*
    * 登录验证
    */
    public function doLogIn()
    {
        // 获取输入变量
        $uNickemailtel = $this->request->post('unickemailtel','','trim,htmlspecialchars');
        $uPa = $this->request->post('upa','','trim,md5');
        // 请求表单输入的变量
        // $uNick = Request::post('unick','','trim');
        // $uNick = $this->request->post('unick','','trim');
        // $uPa = Request::post('upa','','trim,md5');
        // $uPa = $this->request->post('upa','','trim,md5');
        // dump($uNick);
        // dump($uPa);
        // 编写链式查询
        // 第一步：选择连接方案
        // connect：动态连接
        // $re = Db::connect('forum')
        //     ->name('user');
        // $re = Db::name('user')
        $re = app('db')->name('user')
            // 第二步：修饰查询，增加比如条件，排序......，返回Query对象
            // 连贯操作可以打乱顺序
            ->where('u_nick|u_email|u_tel',$uNickemailtel)
            ->where('u_pa',$uPa)
            ->field('u_nick,u_img')
            // 第三步：查询方法
            ->find();
        // ->select();
        // ->value('u_img');
        // dump($re);
        if ($re == null) {
            # 登录失败
            // echo '登录失败';
            $this->error('登录失败，信息错误！','user/login');
        }else {
            # 登录成功
            // 发放通行的票据
            // Session::set('uNick',$re['u_nick']);
            // Cookie::set('uImg',$re['u_img'],24*60*60);
            app('session')->set('uNick',$re['u_nick']);
            app('cookie')->set('uImg',$re['u_img'],24*60*60);
            // echo '登录成功';
            $this->success('登录成功！','index/index');
        }
    }
    /*
    * 渲染登录表单页面
    */
    public function logIn()
    {
        // return View::fetch();
        return app('view')->fetch();
    }
    /*
    * 执行注册
    */
    public function doRegister()
    {
        // 获取表单的值
        $uNick = $this->request->post('unick','','trim');
        $uPa = $this->request->post('upa','','trim');
        $uPa2 = $this->request->post('upa2','','trim');
        $uEmail = $this->request->post('uemail','','trim');
        $uTel = $this->request->post('utel','','trim');
        $ucode = $this->request->post('code','','trim');
        // 验证注册表单
        try {
            // 验证注册表单
            validate( get_class ( app ('userv') ) )
                // 批量验证的开关
                // ->batch(true)
                // 定义验证场景
                ->scene('register')
                ->check([
                    'name'     =>      $uNick,
                    'pwd'       =>      $uPa,
                    'pwd2'      =>      $uPa2,
                    'email'     =>      $uEmail,
                    'tel'       =>      $uTel,
                    'code'      =>      $ucode
                ]);
        } catch (ValidateException $e) {
            // 验证失败，输出错误信息！
            // halt ( $e -> getError() );
            // dump ( $e -> getError() );
            $error = $e -> getError();
            $this -> error($error,'user/register');
        }
        // 判断写入的账户是否被占用：包括昵称、邮箱以及电话
        // $re = Db::name('user')
        $re = app('db')->name('user')
            ->whereOr('u_nick',$uNick)
            ->whereOr('u_email',$uEmail)
            ->whereOr('u_tel',$uTel)
            ->field('u_nick,u_tel')
            ->find();
        if ($re != null) {
            #账户不合法
            if ($re['u_nick'] == $uNick) {
                # 昵称重复
                $this->error('你注册的昵称已经被占用！');
            }
            if ($re['u_tel'] == $uTel) {
                # 电话重复
                $this->error('你注册的电话已经被占用！');
            }
            # 邮箱重复
            $this->error('你注册的邮箱已经被占用！');
        }
        // 组织要写入的数值
        $data = [
            'u_nick'        =>      $uNick,
            'u_pa'          =>      $uPa,
            'u_email'       =>      $uEmail,
            'u_tel'         =>      $uTel
        ];
        // 执行注册
        // $re = Db::name('user')->insert($data);
        $re = app('db')->name('user')->insert($data);
        // 判断结果
        if ($re == 1) {
            #发帖成功
            $this -> success('注册成功！','user/login');
        }else {
            #发帖失败
            $this -> error('注册失败，请稍后再试！');
        }
    }


    public function register()
    {
        // return View::fetch();
        return app('view')->fetch();
    }

    /*
    * 注销
    */
    public function logOut()
    {
        // 查票，防止匿名访问
        $this->check();
        // 删除用户的会话变量
        // Session::clear();
        // Cookie::delete('uImg');
        app('session')->clear();
        app('cookie')->delete('uImg');
        $this->success('注销成功！','Index/index');
    }
    /*
    * 修改密码
    */
    public function doChange()
    {
        // 判断是否意见登录
        $this->check();
        // 修改密码
        // $re = Db::name('user')
        $re = app('db')->name('user')
            ->where('u_nick','ldb')
            ->where('u_pa',md5('123456'))
            ->update(['u_pa' => md5('sz123456')]);
        if ($re == 1) {
            # 修改成功
            $this -> success('修改成功，请重新登录！','user/logout');
        }else {
            # 修改失败
            $this -> error('修改失败！','user/changepa');
        }
    }
    /*
    * 渲染上传头像的表单页面
    */
    public function me()
    {
        $this->check();
        // return View::fetch();
        return app('view')->fetch();
    }
    /*
    * 更新用户头像
    */
    public function upMe()
    {
        // 查票
        $this->check();
        // 获取文件对象
        $file = $this->request->file('uimg');
        // dump($file);
        // 挪动到指定位置
        // putFile第一个参数是新增子目录名，
        // 第二个参数是文件对象，
        // 第三个是命名规则，默认是date
        // $savename = Filesystem::disk('portrait')->putFile('',$file);
        $savename = app('filesystem')->disk('portrait')->putFile('',$file);
        // dump($val);
        // $savePath = $this->app->getRootPath() . 'public/static/ldblf_forum/upload/portrait';
        $fileName = $this->app->getRootPath() . 'public/static/ldblf_forum/upload/portrait/' . $savename;
        // 判断文件是否存在
        if (!file_exists($fileName)) {
            $this->error('文件上传失败，请稍后重试！');
        }
        // 更新头像
        // $re = Db::name('user')
        $re = app('db')->name('user')
            // ->where('u_nick',Session::get('uNick'))
            ->where('u_nick',app('session')->get('uNick'))
            ->update(['u_img' => $savename]);
        // 判断更新结果
        if ($re == 1) {
            # 更新成功，删除旧文件，修改cookie值，提示，跳转
            // $oldFile = $this->app->getRootPath() . 'public/static/ldblf_forum/upload/portrait/' . cookie::get('uImg');
            // 如果不是默认头像，就删除头像
            // if(strlen(cookie::get('uImg'))>8)
            if(strlen((string)app('cookie')->get('uImg'))>8) {
                // $oldFile = $this->app->getRootPath() . 'public/static/ldblf_forum/upload/portrait/' . cookie::get('uImg');
                $oldFile = $this->app->getRootPath() . 'public/static/ldblf_forum/upload/portrait/' . app('cookie')->get('uImg');
                unlink($oldFile);
            }
            // cookie::set('uImg',$savename,24*60*60);
            app('cookie')->set('uImg',$savename,24*60*60);
            $this->success('头像更新成功！','index/index');
        } else{
            # 更新失败,删除新头像，提示，跳转
            unlink($fileName);
            $this->success('头像更新失败！','user/me');
        }
    }
}
